﻿Imports UtilPadrao
Imports System.Transactions
Public Class ctrGrupoAcesso
    Inherits ControlePadrao.ctrPadrao

#Region "Variáveis"

    Private objGrupoAcesso As New Persistencia.perGrupoAcesso
    Private objGrupoItens As New Controle.ctrGrupoAcessoItem

    Public sCamposDemonstracao As String() = {"Identificador", "Grupo Acesso", "Cód. Modulo", "Módulo"}
    Public sCamposTabela As String() = {"codGrupo", "nome", "codModulo", "descricao"}
    Public sCamposChave As String() = {"codGrupo", "nome", "codModulo"}
    Public sTitulosColunas As String() = {"Identificador", "Grupo Acesso", "Cód. Modulo", "Módulo"}

    Public Mensagens As String() = {"Selecione o módulo.",
                                    "Insira o nome do grupo de acesso."}

#End Region

#Region "Enumerações"

    Public Enum eMensagens
        MODULO = 0
        GRUPO = 1
    End Enum

#End Region

#Region "Propriedades"
    Public Property codigoGrupo As Int32
#End Region

#Region "Métodos"

    Public Function gravarGrupoAcesso(ByVal iCodGrupo As Integer,
                                      ByVal sNomeGrupo As String,
                                      ByVal iCodModulo As Integer,
                                      ByVal iCodModuloOriginal As Integer,
                                      ByVal datMenus As DataTable) As Boolean

        Dim bRetorno As Boolean = False
        Dim bAbrirFecharConexao As Boolean = False

        Try

            MyBase.limparMensagensValidacao()

            If Me.validarGrupoAcesso(eTipoValidacao.GRAVACAO,
                                     iCodModulo,
                                     sNomeGrupo) Then

                Using scope As New TransactionScope

                    Me.objGrupoAcesso.configurarFechamentoConexao()

                    If iCodGrupo = 0 Then

                        Me.codigoGrupo = Me.objGrupoAcesso.inserirGrupoAcesso(sNomeGrupo,
                                                                              iCodModulo,
                                                                              bAbrirFecharConexao)
                    Else

                        Me.codigoGrupo = iCodGrupo

                        Me.objGrupoAcesso.editarGrupoAcesso(iCodGrupo,
                                                            sNomeGrupo,
                                                            iCodModulo,
                                                            bAbrirFecharConexao)

                    End If

                    If iCodModulo <> iCodModuloOriginal Then

                        Me.objGrupoItens.excluirGrupoAcessoItem(iCodGrupo,
                                                                bAbrirFecharConexao)

                    End If


                    For Each drDados As DataRow In datMenus.Rows

                        If Me.objGrupoItens.editarGrupoAcessoItem(conversao.toInt32(drDados.Item("codItem")),
                                                                  conversao.toBoolean(drDados.Item("inserir")),
                                                                  conversao.toBoolean(drDados.Item("excluir")),
                                                                  conversao.toBoolean(drDados.Item("alterar")),
                                                                  conversao.toBoolean(drDados.Item("consultar")),
                                                                  bAbrirFecharConexao) = 0 Then

                            Me.objGrupoItens.inserirGrupoAcessoItem(Me.codigoGrupo,
                                                                    conversao.toInt32(drDados.Item("codMenu")),
                                                                    conversao.toBoolean(drDados.Item("inserir")),
                                                                    conversao.toBoolean(drDados.Item("excluir")),
                                                                    conversao.toBoolean(drDados.Item("alterar")),
                                                                    conversao.toBoolean(drDados.Item("consultar")),
                                                                    bAbrirFecharConexao)

                        End If

                    Next

                    scope.Complete()

                    Me.objGrupoAcesso.configurarFechamentoConexao()

                    bRetorno = True

                End Using

            End If

            Return bRetorno

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Function excluirGrupoAcesso(ByVal iCodGrupo As Integer) As Boolean

        Dim bResultado As Boolean = True

        Try

            Using scope As New TransactionScope

                Me.objGrupoAcesso.configurarFechamentoConexao()

                Me.objGrupoItens.excluirGrupoAcessoItem(iCodGrupo, False)
                Me.objGrupoAcesso.excluirGrupoAcesso(iCodGrupo, False)

                Me.objGrupoAcesso.configurarFechamentoConexao()

                scope.Complete()

            End Using

            Return bResultado

        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Function selecionarGrupoAcessoMenus(ByVal iCodGrupo As Integer,
                                               ByVal iCodModu As Integer) As DataTable
        Try

            Return Me.objGrupoAcesso.selecionarGrupoAcessoMenus(iCodGrupo,
                                                                iCodModu)
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Function selecionarGrupoAcesso() As DataTable
        Return Me.objGrupoAcesso.selecionarGrupoAcesso
    End Function

    Public Function selecionarGrupoAcesso(ByVal iCodModulo As Int32,
                                          ByVal iCodSelecionado As Int32) As DataTable

        Try
            Return Me.objGrupoAcesso.selecionarGrupoAcesso(iCodModulo, iCodSelecionado)
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Function selecionarGrupoAcessoCodigo(ByVal iCodGrupo As Integer,
                                                ByVal iCodModulo As Int32,
                                                ByVal iCodSelecionado As Int32) As DataRow

        Try
            Return Me.objGrupoAcesso.selecionarGrupoAcessoCodigo(iCodGrupo, iCodModulo, iCodSelecionado)
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Function seGrupoUsuarios(ByVal iCodGrupo) As Boolean

        Try
            Return Me.objGrupoAcesso.seGrupoUsuarios(iCodGrupo)
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Public Function selecionarGrupoAcessoModulo(ByVal iCodModulo As Integer) As DataTable

        Try
            Return Me.objGrupoAcesso.selecionarGrupoAcessoModulo(iCodModulo)
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try

    End Function

    Private Function validarGrupoAcesso(ByVal tipoValidacao As eTipoValidacao,
                                        ByVal iCodModulo As Int32,
                                        ByVal sNome As String) As Boolean

        Dim bRetorno As Boolean = True

        Try

            Select Case tipoValidacao

                Case eTipoValidacao.GRAVACAO

                    If String.IsNullOrWhiteSpace(sNome) Then
                        MyBase.adicionarMensagensValidacao(eMensagens.GRUPO,
                                                           ctrEmpresa.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.GRUPO))
                        bRetorno = False

                    End If

                    If iCodModulo = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.MODULO,
                                                           ctrEmpresa.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.MODULO))
                        bRetorno = False

                    End If

                Case eTipoValidacao.EXCLUSAO



            End Select

        Catch ex As Exception
            Throw New Exception(Environment.NewLine)
        End Try

        Return bRetorno

    End Function

#End Region

End Class
